parser grammar ExpresionesParser;

options {
  language = Java;
  tokenVocab = ExpresionesLexer;
  ASTLabelType = MiArbol;
  output = AST;
  backtrack = true;
}

tokens {
  LISTA_INST;
}

@header {
  package PL.practica10;
}


entrada: (instruccion)* -> ^(LISTA_INST instruccion*)
       ;

instruccion : asignacion 
            | operacion
            | operacion_relacional
            ;


asignacion : ID ASIGNACION^ expr SEPARADOR!
           ;

operacion : expr SEPARADOR!
          ;
 
operacion_relacional : expr (op_rel^ expr)* SEPARADOR!
                     ;
  
expr : exp_mult ((MAS^ exp_mult) 
     | (MENOS^ exp_mult))*
     ;
        
     
exp_mult :  exp_base ((ASTERISCO^ exp_base) 
         | (SLASH^ exp_base))*
         ;
   
 
exp_base : NUMERO 
         | ABRIRPARENTESIS! expr CERRARPARENTESIS!
         | MENOS^ ID
         | ID
         ;
          
          
op_rel : MAYOR_IGUAL
       | MENOR_IGUAL
       | MENOR
       | MAYOR
       | DISTINTO
       | IGUAL
       ;  
          